/** @jsxImportSource @emotion/react */
import * as React from "react";
import {css} from "@emotion/react";
import {
  CCell, Table, TableBody, TableRow, Text, TableHead, BlobInputList, Button, LineColumn,
} from "customize-easy-ui-component";
import {InspectRecordLayout, InternalItemProps, RepLink, useItemInputControl} from "../../common/base";
import {useOmnipotentPref, useOmnipotentPrefTitle} from "../../hook/useOmnipotentPref";
import {TailMenRowIspCheck} from "../../contain/rarelyVary";
import {useMeasureInpFilter} from "../../common/hooks";
import {objNestSet, tableSetInp} from "../../../common/tool";


interface Props extends InternalItemProps {
  iAname?: string[];
  part?: number;
}
// ['远程监', [{t:'远', s: 1},{t:'( 1 )',s: 1},{t:'开'}], '乘', 'mm'] ,        ['降温措', [], '采求。' ] ,
const item检验项 = [
  ['使用管理', [{t:'资料核查', s: 12}, ], '锅炉使用管理制度及执行见证资料', ],
  ['人员证', [{}], '锅炉使用登记证及作业人员证书',  ],
  ['出厂资料', [{}], '锅炉出厂资料、锅炉安装竣工资料、锅炉改造和重大修理技术资料以及监督检验证书',  ],
  ['历次检', [{}], '锅炉历次检验、检查、修理资料',  ],
  ['型式试', [{}], '液（气）体燃料燃烧器型式试验证书',  ],
  ['保养记', [{}], '锅炉月度、年度检查记录和定期维护保养记录',  ],
  ['事故记', [{}], '锅炉日常使用记录、运行故障和事故记录',  ],
  ['能效测', [{}], '相关安全技术规范要求的锅炉产品定型能效测试报告、定期能效测试报告以及日常节能检查记录',  ],
  ['运行规', [{}], '锅炉运行规程、检修工艺文件，A级高压以上电站锅炉还应当包括金属技术监督制度、热工技术监督制度、水汽质量监督制度',  ],
  ['应急专', [{}], '锅炉事故应急专项预案及演练记录',  ],
  ['上整改', [{}], '核查上次检验发现问题的整改情况',  ],
  ['其他资', [{}], '检验人员认为需要查阅的其他技术资料',  ],
  ['炉铭牌', [{t:'锅炉铭牌、操作空间和承重装置', s: 4}, ], '锅炉铭牌', ],
  ['零米层', [{}], '零米层、运转层和控制室的出口布置及开门方向，通道、地面、沟道的畅通情况，照明设施、事故控制电源和事故照明电源以及楼梯、平台、栏杆、护板的完好情况，孔洞周围的安全防护情况，平台和楼板的载荷限量以及标高标志',  ],
  ['承重构', [{}], '承重结构的过热、腐蚀、承力情况',  ],
  ['防火雷', [{}], '防火、防雷、防风、防雨、防冻、防腐等设施情况。',  ],
  ['管道漏', [{t:'管道、阀门和支吊架', s: 3}, ], '管道的标志以及泄漏情况', ],
  ['阀门漏', [{}], '阀门的参数、开关方向标志、编号、重要阀门的开度指示和限位装置以及阀门的泄漏情况',  ],
  ['支吊架', [{}], '支吊架的裂纹、脱落、变形、腐蚀、焊缝开裂、卡死情况，吊架失载、过载以及吊架螺帽松动情况',  ],
  ['炉墙顶', [{t:'炉墙和保温', s: 4}, ], '炉墙、炉顶的开裂、破损、脱落、漏烟、漏灰和变形情况以及炉墙的振动情况', ],
  ['保温好', [{}], '保温完好情况，设备和管道保温外表面温度情况',  ],
  ['门孔密封', [{}], '炉膛、烟道各门孔的密封、完好情况；',  ],
  ['耐火层', [{}], '耐火层的破损、脱落以及膨胀节的膨胀、变形、开裂情况',  ],
  ['膨胀心固', [{t:'膨胀系统', s: 6}, ], '悬吊式锅炉膨胀中心的固定情况', ],
  ['膨胀示', [{}], '锅炉膨胀指示装置的卡阻、损坏、指示情况及膨胀量记录',  ],
  ['部件膨', [{}], '锅炉各部件的膨胀情况',  ],
  ['悬吊固', [{}], '检查悬吊式锅炉膨胀中心，是否固定',  ],
  ['膨胀记录', [{}], '抽查锅炉膨胀指示装置，是否完好，是否有卡阻或者损坏现象，膨胀指示器刻度盘刻度是否清晰，指示是否正常，核查膨胀量记录',  ],
  ['膨受阻', [{}], '抽查各部件膨胀情况，是否有受阻现象',  ],
  ['安全阀', [{t:'安全附件、仪表和安全保护装置', s: 11}, {t:'安全阀',s: 4} ], '安全阀的安装、数量、型式、规格以及安全阀上的装置', ],
  ['阀试验', [{}], '安全阀定期排放试验记录、控制式安全阀和控制系统定期试验记录，安全阀定期校验记录或者报告',  ],
  ['阀校验', [{}], '安全阀校验铅封情况，校验标示牌信息与相应校验记录或报告核对情况',  ],
  ['阀解列', [{}], '安全阀的解列、泄漏情况，排汽、疏水的布置，消音器排汽孔的堵塞、积水、结冰情况',  ],
  ['压力表', [{}, {t:'压力测量装置',s: 7} ], '压力表的装设及其部位、精确度、量程、表盘直径', ],
  ['压表检', [{}], '压力表检定或者校准记录、报告或者证书，与现场压力表核对情况',  ],
  ['压刻度高', [{}], '压力表刻度盘的高限压力指示标志',  ],
  ['压力取样', [{}], '压力表、压力取样管和阀门的损坏、泄漏情况',  ],
  ['压三通', [{}], '压力表前三通阀门、存水弯管安装情况',  ],
  ['同位压表', [{}], '同一系统内相同位置的各压力表示值的误差情况',  ],
  ['压报警', [{}], '炉膛压力测量系统的报警和保护定值',  ],
  ['水位表', [{t:'安全附件、仪表和安全保护装置', s: 10}, {t:'水位测量与示控装置',s: 10} ], '直读式水位表的数量、装设、结构和远程水位测量装置的装设', ],
  ['正常水', [{}], '水位表的水位显示情况以及最低、最高安全水位和正常水位的标志',  ],
  ['水表连接', [{}], '就地水位表的连接、支撑、保温情况，以及疏水管的布置',  ],
  ['平衡容器', [{}], '平衡容器以及汽水侧阀门的保温、泄漏情况',  ],
  ['电接水漏', [{}], '电接点水位表接点的泄漏情况',  ],
  ['水校对', [{}], '远程水位测量装置与就地水位表校对记录',  ],
  ['远程水位', [{}], '用远程水位测量装置监视锅炉水位时，其信号的独立取出情况',  ],
  ['冲洗', [{}], '冲洗记录',  ],
  ['水位计漏', [{}], '水位计本体泄漏情况',  ],
  ['给水调节', [{}], '自动给水调节装置投用情况',  ],
  ['测温装', [{t:'安全附件、仪表和安全保护装置', s: 9}, {t:'温度测量装置',s: 4} ], '温度测量装置的装设位置、量程', ],
  ['温校验', [{}], '温度测量装置校验或者校准记录、报告或者证书',  ],
  ['测温误差', [{}], '温度测量装置的运行、示值误差情况',  ],
  ['测温漏', [{}], '螺纹固定的测温元件的泄漏情况',  ],
  ['联锁安保', [{}, {t:'安全保护装置',s: 4} ], '报警、联锁安全保护装置的设置', ],
  ['安保护记', [{}], '联锁保护投退记录',  ],
  ['保护值', [{}], '报警、联锁安全保护装置保护定值和动作试验记录',  ],
  ['安动力试', [{}], '动力源试验记录',  ],
  ['防爆门排', [{}, {t:'防爆门',s: 1} ], '防爆门的完好情况和排放方向', ],
  ['排污管', [{t:'排污和放水装置', s: 1}, ], '排污阀与排污管的振动、渗漏情况', ],
  ['除渣情', [{t:'除渣设备和吹灰器', s: 2}, ], '除渣设备的运行情况', ],
  ['吹灰器', [{}], '吹灰器的损坏情况、提升阀门的泄漏情况、蒸汽及疏水管道的布置',  ],
  ['燃烧设', [{t:'燃烧设备、辅助设备 以及系统', s: 2}, ], '燃烧设备以及系统运转情况', ],
  ['鼓风', [{}], '鼓风机、引风机运转情况',  ],
  ['水质处', [{t:'水质处理', s: 2}, ], '水质处理情况及记录', ],
  ['取样水汽', [{}], '超高压及以下锅炉取样检验水汽质量',  ],
];
export const itemA检验项: string[] = [ ];
item检验项.forEach(([name, title, initIsp], i: number) => {
    itemA检验项.push(name as string);
});
const item检验项1=item检验项.slice(0,29);
const item检验项2=item检验项.slice(29,item检验项.length);
export const InspectionItem =
    React.forwardRef((
        {children, show, alone = true, refWidth, label, iAname,part}: Props, ref
    ) => {
      const {inp, setInp} = useItemInputControl({ref});
      const itemA = React.useMemo(() => {
        return [ ...iAname ?? [], ...itemA检验项 ];
      }, [ iAname, part]);
      const [getInpFilter] = useMeasureInpFilter(null, itemA,);
      const baseSeq= part===1? 0: item检验项1.length;
      const config = part===1? item检验项1: item检验项2;
      const titNode=useOmnipotentPrefTitle({config, baseSeq});
      return (
          <InspectRecordLayout inp={inp} setInp={setInp} getInpFilter={getInpFilter} show={show}
                               alone={alone} label={label!}>
            <Text variant="h5">{label}：</Text>
            {config.map(([name, _1, _2, unit]: any, i: number) => {
              return (<React.Fragment key={i}>
                <div css={{display: 'flex', flexWrap: 'wrap', alignItems: 'center'}}>
                  {titNode[i]}
                  &nbsp;
                  <div css={{display: 'inline-flex', alignItems: 'center',flexWrap: 'wrap'}}>
                    结果：
                    <BlobInputList value={inp?.[name]?.r || ''} datalist={['√','○','—','△','×']}   rows={1}
                                style={{display: 'inline-flex', width: '7rem',maxWidth:'100%',fontSize: '1.1rem',}}
                                listStyle={css({fontSize: '1.4rem',})}
                                onListChange={v => objNestSet(name, 'r', v || undefined, inp, setInp)}/>
                  </div>
                </div>
              </React.Fragment>);
            })}
            <Text>
              注：结果栏中符合要求打“√”，基本符合要求打“○”，不符合要求打“×”，没有的项目打“—”，已整改打“△”。
            </Text>
            {children}
          </InspectRecordLayout>
      );
  });

const itemA其他项=['其他表',];
const default其他项: never[]=[];
/**通用见证材料3项的： 约定：children [] 可以嵌入俩个儿子DOM节点，分别代表两个段落插入一个div块;
 * */
export const OtherProject=
    React.forwardRef((
        { children, show ,alone=true,redId,nestMd,label,refWidth}:Props,  ref
    ) => {
          // const {isWideSrc, } = useMMenuBarOcup(false);    自适应编辑框的大小
      const defvcbFunc = React.useCallback((par: any) => {
        if(!(par.其他表?.length>=1))   par.其他表=default其他项;
        return  par;
      }, []);
      const [getInpFilter]=useMeasureInpFilter(null,itemA其他项,defvcbFunc);
      const {inp, setInp} = useItemInputControl({ ref });
      return <InspectRecordLayout inp={inp} setInp={setInp} getInpFilter={getInpFilter} show={show} redId={redId}
                                  nestMd={nestMd} alone={alone} label={label!}>
          <Text variant="h5">
              {label}:
            <Button onPress={() => {
              setInp({...inp, 其他表: default其他项});
            }}>清空全表至默认</Button>
          </Text>
        <LineColumn column={3}>
          {(new Array(10)).fill(null).map((_, w: number) => {
            return <React.Fragment key={w}>
              <div css={{display: 'flex', flexWrap: 'wrap', justifyContent: 'space-between'}}>
                序号 {w + 67} ：
                <div css={{display: 'inline-flex', alignItems: 'center', whiteSpace: 'nowrap',maxWidth: '60rem', width: '100%'}}>
                  检验内容
                  <BlobInputList value={inp?.其他表?.[w]?.a || ''} datalist={['锅炉水汽质量检测报告编号，检验结论为基本符合要求']}
                                 style={{display: 'inline-flex', width: '100%'}} rows={refWidth!>700? 2:3}
                                 onListChange={v => tableSetInp('其他表', w, inp, setInp, 'a', v || undefined)}/>

                </div>
                <div css={{display: 'inline-flex', alignItems: 'center', flexWrap: 'wrap'}}>
                  结果：
                  <BlobInputList value={inp?.其他表?.[w]?.r || ''} datalist={['√', '○', '—', '△', '×']} rows={1}
                                 style={{display: 'inline-flex', width: '7rem', maxWidth: '100%', fontSize: '1.1rem',}}
                                 listStyle={css({fontSize: '1.4rem',})}
                                 onListChange={v => tableSetInp('其他表', w, inp, setInp, 'r', v || undefined)}/>
                </div>
              </div>
            </React.Fragment>;
          })}
        </LineColumn>
        <Text>
          注：结果栏中符合要求打“√”，基本符合要求打“○”，不符合要求打“×”，没有的项目打“—”，已整改打“△”。
        </Text>
        {children}
      </InspectRecordLayout>;
});

const tailRender = (orc: any, name: string, lix: number, unit: any) => {
  //[统一依赖] 0.875rem===theme.fontSizes[0]
  const nneedbig = orc?.[name]?.r?.length >= 3 || (!orc?.[name]?.r);
  return <>
    <CCell>
      <div css={{whiteSpace: 'pre-wrap'}}><Text
          css={{fontSize: nneedbig ? '0.875rem' : '1.15rem'}}>{orc?.[name]?.r ?? '／'}</Text></div>
    </CCell>
  </>;
}
const fixedRowsc=item检验项.length;
//末尾自定义部份只能拆解出去的；
export const InspectionItemVw = ({orc, rep}: { orc: any, rep: any }
) => {
  const hasOther= orc?.其他表?.find((o: any, i: number) => {
        if(JSON.stringify(o)!=='{}' )  return true;
  } );
  const [renderP1,renderP2] = useOmnipotentPref({
        orc, config: item检验项, split:[29], tag:'WjIspItms',
        tailRender, pcols: 2, noNo: false, unitCel: false
  });
  return <>
    <div css={{"@media print": {paddingBottom: '3.5rem', pageBreakInside: 'avoid'}}}>
      <Text id='InspectionItem' variant="h2" css={{
        textAlign: 'center', marginTop: '1rem',
      }}>电站锅炉外部检验项目表</Text>
      <div css={{display: 'flex', justifyContent: 'space-between'}}>
        <Text></Text>
        <Text>报告编号：{rep.isp.no}</Text>
      </div>
    </div>
    <Table fixed={["4%", "10%", "8%", "%", "10%"]}
           css={{borderCollapse: 'collapse', "@media print": {marginTop: '-3.5rem'}}} tight miniw={800}>
      <TableHead>
        <TableRow>
          <CCell><Text css={{fontSize: '0.65rem'}}>序号</Text></CCell><CCell
            colSpan={2}>检验项目</CCell><CCell>检验内容</CCell><CCell>结果</CCell>
        </TableRow>
      </TableHead>
      <TableBody>
        <RepLink rep={rep} tag={'InspectionItem'}>
          {renderP1}
        </RepLink>
        <RepLink rep={rep} tag={'WjIspItms_29'}>
          {renderP2}
        </RepLink>
        <RepLink rep={rep} tag={'OtherProject'}>
          {hasOther && orc?.其他表?.map((o: any, i: number) => {
              //rowSpan 可直接=10，最后一个row呢
              if(JSON.stringify(o)==='{}' )  return null;
              else return (
                  <TableRow key={i}>
                    <CCell>{i+1+fixedRowsc}</CCell>
                    {0===i && <CCell colSpan={2} rowSpan={10}>其他</CCell>}
                    <CCell>{o?.a}</CCell>
                    <CCell>{o?.r}</CCell>
                  </TableRow>
              );
          } ) }
          {!hasOther && <TableRow  css={{"@media print": {display: 'none'}}}>
              <CCell>{1+fixedRowsc}</CCell>
              <CCell colSpan={4}>其他 。。。 (进入编辑)</CCell>
          </TableRow>
          }
        </RepLink>
      </TableBody>
    </Table>
    <TailMenRowIspCheck orc={orc} rep={rep} href={`/report/${rep?.modeltype}/ver/${rep?.modelversion}/${rep?.id}/ProjectList#ProjectList`}>
    </TailMenRowIspCheck>
    <Text css={{fontSize:'0.75rem'}}>
      注：结果栏中符合要求打“√”，基本符合要求打“○”，不符合要求打“×”，没有的项目打“—”，已整改打“△”。
    </Text>
  </>;
};
